﻿#include <iostream>
#include <stack>


using namespace std;


/*
给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
有效字符串需满足：
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
 
示例 1：
输入：s = "()"
输出：true

示例 2：
输入：s = "()[]{}"
输出：true

示例 3：
输入：s = "(]"
输出：false

示例 4：
输入：s = "([)]"
输出：false

示例 5：
输入：s = "{[]}"
输出：true
 

提示：
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
*/



class Solution {
public:
	stack<char> st;
	bool isValid(string s) {
		for (auto& e : s) {
			if (e == '('||e=='{'||e=='[') {
				st.push(e);
			}
			else if (!st.empty() && st.top()=='('&& e == ')') {
				st.pop();
			}
			else if (!st.empty() && st.top() == '{'&& e == '}') {
				st.pop();
			}
			else if (!st.empty() && st.top() == '['&& e == ']') {
				st.pop();
			}
			else {
				return false;
			}
		}
		if (!st.empty()) return false;

		return true;
	}
};



//
//
//int main() {
//
//
//	return 0;
//}